# 用字符串数据类型的名字 来操作这个名字对应的函数\实例变量\绑定方法\各种方法

# name = 'alex'
# age = 123
#
# n = input('>>>')
# if n == 'name':print(name)
# elif n == 'age':print(age)

# 有些时候 你明明知道一个变量的字符串数据类型的名字,你想直接调用它,但是调不到#
# 使用反射

# 1.反射对象的 实例变量
# 2.反射类的 静态变量/绑定方法/其他方法
# 3.模块中的 所有变量
    # 被导入的模块
    # 当前执行的py文件 - 脚本


import a
print('*'*20)
s=a.Wechat()
s.pay()
print(a.Alipay)
print(getattr(a,'lst'))
# 对象名.属性名 ==> getattr(对象名,'属性名')
# a.Alipay ==> getattr(a,'Alipay')
al=getattr(a, 'Alipay')
print(getattr(a, 'Wechat'))
al().pay()
# import sys
# print(sys.modules)
# print(id(a),id(sys.modules['a']))
# print(sys.modules['a'].Alipay)
# print(getattr(sys.modules['a'],'Alipay'))
#
# wahaha='hahah'
# print(getattr(sys.modules['__main__'],'wahaha'))

class A:
    Role='法师'
    def __init__(self):
        self.name='alex'
        self.age=84
    def func(self):
        print('wahaha')
        return 666
a=A()
print(getattr(a,'name'))# 反射对象的实例变量
print(getattr(a,'func')())# 反射对象的绑定方法
print(getattr(A,'Role'))

























































